/**
 * @param {number} n
 * @return {number}
 */
export var largestPalindrome = function (n) {
  if (n === 1) return 9
  const [max, min] = [Math.pow(10, n) - 1, Math.pow(10, n - 1)]
  // 从大到小枚举
  for (let i = max; i >= min; i--) {
    // 组成回文数 i 即为左半数字，反转后为右半数字
    const ans = BigInt(String(i) + String(i).split('').reverse().join(''))
    // 从最大数开始向小枚举，找出能被 ans 整除的数, 此时 ans 已经是最大回文数
    let x = BigInt(max)
    while (x * x >= ans) {
      if (ans % x === BigInt(0)) return Number(ans % BigInt(1337))
      x--
    }
  }
}

// 打表 ->{9,987,123,597,677,1218,877,475}
